//
//  NetworkTools.swift
//  weibo
//
//  Created by apple on 15/12/19.
//  Copyright © 2015年 LYR. All rights reserved.
//

import UIKit
import AFNetworking

let dataErrorDomain = "com.baidu.data.error"

// 枚举网络请求的方式 
enum HTTPMethod: String {
   case GET = "GET"
   case POST = "POST"
}

//网络请求的处理层  以后的网络请求 都使用这个类 来进行数据的获取
class NetworkTools: AFHTTPSessionManager {
    
    // 单例对象
    static let sharedTools: NetworkTools = {
    
    // 设置base url
       let urlString = "https://api.weibo.com/"
        
        let url = NSURL(string: urlString)
        let tools = NetworkTools(baseURL: url)
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        return tools
    
    }()
    
    // 网络请求的核心方法封装
    func requestJSONDict(methed: HTTPMethod,urlString: String,parameters: [String : String]?,finished:(dict: [String : AnyObject]?,error: NSError?) -> ()) {
    
        if methed == HTTPMethod.POST {
          // 发送post请求
        POST(urlString, parameters: parameters, progress: { (p) -> Void in
            print(p)
            }, success: { (_, result) -> Void in
                
                //请求成功的回调
               // print(result)
                
                guard let dict = result as? [String : AnyObject] else {
                // 不能转换为字典  请求失败
                // domain: 反转的域名
                //  code: 错去状态码  自定义的错误信息 一般使用 负数
                    let myError = NSError(domain: dataErrorDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据不合法"])
                    print(myError)
                
                    finished(dict: nil, error: myError)
                  return
                }
                //  执行成功的回调
                finished(dict: dict, error: nil)
            
            }, failure: { (_, error) -> Void in
                
                //请求失败的回调
                finished(dict: nil, error: error)
                
                print(error)
                
        })
            
        }else {
        // 发送get 请求
          GET(urlString, parameters: parameters, progress: { (p) -> Void in
            print(p)
            }, success: { (_, result) -> Void in
                
                //请求成功的回调
               // print(result)
                
                guard let dict = result as? [String : AnyObject] else {
                    // 不能转换为字典  请求失败
                    // domain: 反转的域名
                    //  code: 错去状态码  自定义的错误信息 一般使用 负数
                    let myError = NSError(domain: dataErrorDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据不合法"])
                    print(myError)
                    
                    finished(dict: nil, error: myError)
                    return
                }
                
                //  执行成功的回调
                finished(dict: dict, error: nil)
                
            }, failure: { (_, error) -> Void in
                
                //请求失败的回调
                
                finished(dict: nil, error: error)
                print(error)
                
          })
            
        }
    }
    
    //上传图片的工具方法
    func uploadImage(urlString: String,paraments: [String : String]?,imageData: NSData,finished:(dict: [String : AnyObject]?,error: NSError?) -> ()) {
    
      POST(urlString, parameters: paraments, constructingBodyWithBlock: { (formData) -> Void in
        //将图片的二进制数据添加formData中
        /**
        *   data 需要上传的文件的二进制数据
        name: 服务器接收上传文件的需要对应字段
        fileName: 服务器存储的名称 随便取  新浪微博 会自己去更改名字
        mimeType: 上传的文件的类型
        */
        
        formData.appendPartWithFileData(imageData, name: "pic", fileName: "oopp", mimeType: "image/jpeg")

        }, progress: { (p) -> Void in
            print(p)
        }, success: { (_, result) -> Void in
            //上传成功
                 print("图片上传成功")
            
            if let dict = result as? [String : AnyObject] {
              
                finished(dict: dict, error: nil)
            }
            
        }) { (_, error) -> Void in
            // 上传失败
            print("图片上传失败")
            finished(dict: nil, error: error)
        }
    
    }
    
}
